Current computer applications are more graphically intense and involve higher degrees of graphics processing power than their predecessors. In addition to applications such as games, which typically involve complex and highly detailed graphics renderings involving a substantial amount of ongoing computations for different types of displayed objects, current applications are also tasked with running multiple applications in a windowed environment. A windowed environment allows a display device to present a graphical output corresponding to multiple applications on a single physical display device. The output is typically displayed in one or more windows, each of which may require a unique context. The context for each of the windows defines the properties and parameters of the window area for that application. Another type of context (e.g., a drawing context) may be related to the object or group of objects that can be rendered using certain textures, surface material types and associated shader programs. In this manner, a context may refer to the data utilized by a graphics system to control the rendering process. For example, the display may include a plurality of overlapping windows, where each window is driven by a different application. Texture and shader data and corresponding state values associated with each window can constitute the contexts for those multiple applications. In the circumstance where the background window is called to the foreground, the context is switched such that the display is updated using the data associated with application of the previously covered window. In a low level context switch, the GPU may finish rendering one type of object and switch to another type that uses a different texture and material set.
A texture context may include a texture base address, sampling rules, type format, etc. A shader context may include similar texture contexts, as well as surface material properties, constants, shader code variations, and/or other shading relevant information. Considering a GPU pipeline very deep with several stages, which may render simultaneously different windows or objects and apply textures from different contexts a centralized system of texture context control may be inoperative without significant performance degradation.
In a typical centralized control scheme, a scheduler can maintain a context buffer and switch tasks in and out of the context buffer. For example, a pixel shader scheduler can keep multiple drawing contexts and dispatch texture service requests based on the demands of the shader program. In the case where texture fetching control is independent of shader control, however, the texture control typically pre-processes texture data before and during the shader program execution. The interactions between the shader scheduler and texture control unit introduces a significant memory and timing overhead and makes a centralized context management scheme inefficient. Decentralizing the context buffers present significant data coordination challenges between the processing stages. Thus, a heretofore-unaddressed need exists in the industry to address the aforementioned deficiencies and inadequacies.